#!/bin/bash
#
# 批量运行解题程序并使用 checker 进行校验的脚本
# (v4 - 适配 infile/ 和 outfile/ 子目录)
#

# --- 1. 配置 (已根据您的路径修改) ---

# 您的 Python 解释器
PYTHON_INTERP="python3"

# 您的解题程序 (Python 脚本)
if [ -n "$1" ]; then
    SOLUTION_SCRIPT="$1"
else
    SOLUTION_SCRIPT="/Users/chenxi/Documents/比赛/CCF/code/code.py"
fi

# 存放所有测试用例的目录
BASE_DIR="/Users/chenxi/Documents/比赛/CCF/checker/example"
INFILE_DIR="${BASE_DIR}/infile"
OUTFILE_DIR="${BASE_DIR}/outfile"

# 检验结果的日志文件 (将创建在您运行此脚本的当前目录下)
SCRIPT_BASENAME=$(basename "$SOLUTION_SCRIPT" .py)
LOG_FILE="/Users/chenxi/Documents/比赛/CCF/code/log/${SCRIPT_BASENAME}.log"

# checker 程序的可执行文件路径
CHECKER_EXEC="/Users/chenxi/Documents/比赛/CCF/checker/checker"

# --- 2. 检查环境 ---

# 确保 checker 存在
if [ ! -f "$CHECKER_EXEC" ]; then
    echo "❌ 错误: checker 程序 '$CHECKER_EXEC' 未找到。"
    echo "   (来自 Makefile 的信息，请确保已编译)"
    exit 1
fi

# 确保您的解题程序 (Python 脚本) 存在
if [ ! -f "$SOLUTION_SCRIPT" ]; then
    echo "❌ 错误: 您的解题程序 '$SOLUTION_SCRIPT' 未找到。"
    exit 1
fi

# 确保测试数据输入目录存在
if [ ! -d "$INFILE_DIR" ]; then
    echo "❌ 错误: 测试数据输入目录 '$INFILE_DIR' 未找到。"
    echo "   请确保您的 infile 文件存放在该目录下。"
    exit 1
fi

# 确保测试数据输出目录存在 (如果不存在，则自动创建)
if [ ! -d "$OUTFILE_DIR" ]; then
    echo "⚠️  警告: 输出目录 '$OUTFILE_DIR' 未找到，将自动创建..."
    mkdir -p "$OUTFILE_DIR"
    if [ $? -ne 0 ]; then
        echo "❌ 错误: 无法创建输出目录 '$OUTFILE_DIR'。"
        exit 1
    fi
fi

# 检查 Python 解释器是否存在
if ! command -v "$PYTHON_INTERP" &> /dev/null; then
    echo "❌ 错误: 未找到 Python 解释器 '$PYTHON_INTERP'。"
    exit 1
fi

# --- 3. 运行和校验 ---

# 清空之前的日志文件
echo "评测开始于: $(date)" > "$LOG_FILE"
echo "日志将写入到 $LOG_FILE"
echo "-----------------------------------------" | tee -a "$LOG_FILE"

# 查找 $INFILE_DIR 目录下的所有 infile*.txt 文件
shopt -s nullglob
file_count=0
for local_infile in "$INFILE_DIR"/infile*.txt ; do
    
    file_count=$((file_count + 1))
    
    # --- 关键改动: 构造输出文件路径 ---
    # 1. 获取输入文件名 (e.g., "infile_01.txt")
    infile_basename=$(basename "$local_infile")
    
    # 2. 替换 "infile" 为 "outfile" (e.g., "outfile_01.txt")
    outfile_basename="${infile_basename/infile/outfile}"
    
    # 3. 组合成完整的输出路径
    local_outfile="${OUTFILE_DIR}/${outfile_basename}"
    
    # (日志记录名保持不变)
    case_name="$infile_basename"

    echo "▶️  正在处理: ${case_name}"

    # 1. 运行您的程序，生成 outfile
    echo "  [步骤 1] 运行您的解题程序 ($PYTHON_INTERP $SOLUTION_SCRIPT)..."
    # $local_infile 指向 .../infile/infile_01.txt
    # $local_outfile 指向 .../outfile/outfile_01.txt
    "$PYTHON_INTERP" "$SOLUTION_SCRIPT" < "$local_infile" > "$local_outfile"
    
    # 2. 运行 checker 进行检验
    echo "  [步骤 2] 运行 checker 进行校验..."
    
    echo "--- 检验结果: ${case_name} ---" >> "$LOG_FILE"
    
    # 运行 checker
    # 根据 README.md 和 checker.cc，第三个参数未被使用，但必须提供
    "$CHECKER_EXEC" "$local_infile" "$local_outfile" "$local_outfile" >> "$LOG_FILE" 2>&1
    
    tail -n 1 "$LOG_FILE"
    echo ""

done

if [ $file_count -eq 0 ]; then
    echo "⚠️  警告: 在 '$INFILE_DIR' 中未找到任何 'infile*.txt' 文件。"
fi

echo "-----------------------------------------" | tee -a "$LOG_FILE"
echo "✅ 批量评测完成。详细结果请查看: $LOG_FILE"